/**
 * GET    /login
 * GET    /signup
 * GET    /           不需要登录就可以访问
 * GET    /diagrams   必须登录才可以访问
 */

const express = require('express');
const fs = require('fs');
//导入 body 解析包
const bodyParser = require('body-parser');
//导入 session 操作的包
const session = require('express-session');
//获取 data.json 中的数据
const data = require('./data.json');
const app = express();
//设置模板引擎
app.set('view engine','ejs');
//设置模板的存放位置
app.set('views', __dirname + '/templates');

//设置body-parser的中间件
app.use(bodyParser.urlencoded({ extended: false }));
//设置 session 中间件
app.use(session({
    secret: '12j1oi2j31ipo2j31i231joi231joi23',
    resave: false,
    saveUninitialized: false,
}));

//声明监测登录状态的中间件函数
let checkLoginMiddleware = function(request, response, next){
    if(request.session.phone && request.session.uid) {
        next();
    }else{
        //如果没有登录, 则将页面重定向至登录页面
        response.redirect('/login');
    }
}

//登录页面的路由
app.get('/login', (request, response) => {
    response.render('login');
});

//登录操作
app.post('/login', (request, response) => {
    //获取请求体数据
    // console.log(request.body);
    //检查所有的用户当中是否包含与请求来的数据一致的内容
    let result = data.users.find(item => {
        if(item.phone === request.body.phone && item.password === request.body.password){
            return true;
        }else{
            return false;
        }
    });
    //判断 result 
    if(result) {
        //写入 session 或者是 cookie
        request.session.uid = result.id;
        request.session.phone = result.phone;

        response.send('登录成功');
    }else{
        //登录失败后 显示登录页面, 并为用户提供错误提醒
        response.render('login', {errMsg: '用户名或密码错误'});
    }
});

//注册页面的路由
app.get('/signup', (request, response) => {
    //响应表单页面 form   response.send   response.sendFile   response.render (ejs)
    response.render('signup');
});

//用户注册的路由
app.post('/signup', (request, response) => {
    //处理请求体数据 body-parser  三步走
    //获取请求体数据   文件写入
    //文件写入  data.json   
    request.body.id = data.users.length + 1;
    //将 request.body 数据保存在 data.users 中
    data.users.push(request.body);
    //将 data 转化为 JSON 字符串
    let str = JSON.stringify(data, null, '\t');
    //将 data 数据写回到文件中
    fs.writeFile('./data.json', str, (err) => {
        //保存失败
        if(err) {
            response.send('注册失败, 请重试');
        }else{
            response.redirect('/login');//
        }
    });
});

//首页的路由
app.get('/', (request, response) => {
    console.log(request.session.phone);
    console.log(request.session.uid);// id 
    response.send('网站首页');
});

//个人图纸的列表页   必须登录才可以方法
app.get('/diagrams', checkLoginMiddleware,(request, response) => {
    // if(request.session.phone) {}
    response.send('图纸的列表页');
});

app.get('/setting', checkLoginMiddleware, (request, response) => {
    response.send('个人设置页面');
});

app.listen(80, () => {
    console.log('服务已经启动.....');
})


